package br.com.cs.dao.jdbc;

import br.com.cs.exception.DAOException;
import br.com.cs.dao.MembroDAO;
import br.com.cs.model.Membro;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class MembroJDBC extends BaseDAOJDBC implements MembroDAO{
    
    private static String SQL_INSERT_MEMBRO =
            "insert into cadastro_membro (nome, sexo, dt_nasc, estado_civil, naturalidade, rg, data_casamento, nome_conjuge, religiao_conjuge, filiacao_pai, filiacao_mae, profissao, formacao, logradouro, bairro, complemento, cidade, uf, telefone, celular, telefone_comercial, email, site, santificacao, batizado, data_batismo, salvo, experiencia_salvacao, regras_igreja, disposto_regras_igreja, diforciado_novo_lar, caso_nupcias, membro_ord_secreta, vicios, deseja_deixar_vicios, plano_frequentar_cultos, discipulado, suntara_igreja) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            
            private static String SQL_UPDATE_MEMBRO =
            "update cadastro_membro set membro nome = ?, telefone = ? where id = ?";
            
            private static String SQL_DELETE_MEMBRO = "delete from cadastro_membro where matricula = ? ";
            
            private static MembroJDBC instance = new MembroJDBC();
 
    @Override
  public void save(Membro membro) throws DAOException {
        Connection conn = null;
        PreparedStatement pst = null;
        
        try {
            conn = getConnection();
            if (membro.getMatricula() == null) {
                System.out.println("[MembroJDBC] novo membro vai ser incluido...");
                pst = conn.prepareStatement(SQL_INSERT_MEMBRO);
            } else {
                System.out.println("[MembroJDBC] membro ja existente vai ser regravado...");
                pst = conn.prepareStatement(SQL_UPDATE_MEMBRO);
                pst.setInt (39, membro.getMatricula().intValue());
            }
            
            pst.setString(1, membro.getNome());
            pst.setString(2, membro.getSexo());
            pst.setString(3, membro.getDataNasc());
            pst.setString(4, membro.getEstadoCivil());
            pst.setString(5, membro.getNaturalDe());
            pst.setString(6, membro.getRg());
            pst.setString(7, membro.getDataCasar());
            pst.setString(8, membro.getNomeConjuge());
            pst.setString(9, membro.getReliagiaoConjuge());
            pst.setString(10,membro.getNomePai());
            pst.setString(11,membro.getNomeMae());
            pst.setString(12, membro.getProfissao());
            pst.setString(13, membro.getFormacao());
            pst.setString(14, membro.getRua());
            pst.setString(15, membro.getBairro());
            pst.setString(16, membro.getComplemento());
            pst.setString(17, membro.getCidade());
            pst.setString(18, membro.getUf());
            pst.setString(19, membro.getTele());
            pst.setString(20, membro.getCel());
            pst.setString(21, membro.getTelComercial());
            pst.setString(22, membro.getEmail());
            pst.setString(23, membro.getWebsite());
            pst.setString(24, membro.getSantificacao());
            pst.setString(25, membro.getBatizado());
            pst.setString(26, membro.getDtBatismo());
            pst.setString(27, membro.getSalvo());
            pst.setString(28, membro.getPossuiExp());
            pst.setString(29, membro.getLeuRegras());
            pst.setString(30, membro.getDispostoGuardar());
            pst.setString(31, membro.getNovoLar());
            pst.setString(32, membro.getSegNupcias());
            pst.setString(33, membro.getOrdemSecreta());
            pst.setString(34, membro.getEntorpecentes());
            pst.setString(35, membro.getPararFumar());
            pst.setString(36, membro.getFrequentaIgreja());
            pst.setString(37, membro.getDiscipulado());
            pst.setString(38, membro.getSustentarIgreja());
                    
          
            pst.execute();
            
        } catch (Exception e) {
            throw new DAOException("[MembroJDBC - save] : Handled Exception  ", e);
            
        } finally {
            closeResources(conn, pst);
        }
    }

          public static MembroJDBC getInstance() {
          return instance;
      }
    @Override
    protected List getManyByCriteria(String sql) throws br.com.cs.exception.DAOException {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        List alista = new ArrayList();
        
        try {
            conn = getConnection();
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            
            while (rs.next()) {
              
                
                Membro membro = new Membro();
                        membro.setMatricula(new Integer(rs.getInt("matricula")));
                        membro.setNome(rs.getString("nome"));
                        membro.setSexo(rs.getString("sexo"));
                        membro.setDataNasc(rs.getString("dt_nasc"));
                        membro.setEstadoCivil(rs.getString("estado_civil"));
                        membro.setNaturalDe(rs.getString("naturalidade"));
                        membro.setRg(rs.getString("rg"));
                        membro.setDataCasar(rs.getString("data_casamento"));
                        membro.setNomeConjuge(rs.getString("nome_conjuge"));
                        membro.setReliagiaoConjuge(rs.getString("religiao_conjuge"));
                        membro.setNomePai(rs.getString("filiacao_pai"));
                        membro.setNomeMae(rs.getString("filiacao_mae"));
                        membro.setProfissao(rs.getString("profissao"));
                        membro.setFormacao(rs.getString("formacao"));
                        membro.setRua(rs.getString("logradouro"));
                        membro.setBairro(rs.getString("bairro"));
                        membro.setComplemento(rs.getString("complemento"));
                        membro.setCidade(rs.getString("cidade"));
                        membro.setUf(rs.getString("uf"));
                        membro.setTele(rs.getString("telefone"));
                        membro.setCel(rs.getString("celular"));
                        membro.setTelComercial(rs.getString("telefone_comercial"));
                        membro.setEmail(rs.getString("email"));
                        membro.setWebsite(rs.getString("site"));
                        membro.setSantificacao(rs.getString("santificacao"));
                        membro.setBatizado(rs.getString("batizado"));
                        membro.setDtBatismo(rs.getString("data_batismo"));
                        membro.setSalvo(rs.getString("salvo"));
                        membro.setPossuiExp(rs.getString("experiencia_salvacao"));
                        membro.setLeuRegras(rs.getString("regras_igreja"));
                        membro.setDispostoGuardar(rs.getString("disposto_regras_igreja"));
                        membro.setNovoLar(rs.getString("diforciado_novo_lar"));
                        membro.setSegNupcias(rs.getString("caso_nupcias"));
                        membro.setOrdemSecreta(rs.getString("membro_ord_secreta"));
                        membro.setEntorpecentes(rs.getString("vicios"));
                        membro.setPararFumar(rs.getString("deseja_deixar_vicios"));
                        membro.setFrequentaIgreja(rs.getString("plano_frequentar_cultos"));
                        membro.setDiscipulado(rs.getString("discipulado"));
                        membro.setSustentarIgreja(rs.getString("suntara_igreja"));
                        
                
                alista.add(membro);
                
            }
            
            return alista;
            
        } catch (Exception e) {
            throw new DAOException("[MembroJDBC - getManyByCriteria] : Handled Exception  ", e);
            
        } finally {
            closeResources(conn, st, rs);
        }
    }

    @Override
    public void delete(Membro membro) throws DAOException {
        Connection conn = null;
        PreparedStatement pst = null;
        
        try {
            conn = getConnection();
            pst = conn.prepareStatement(SQL_DELETE_MEMBRO);
            
            pst.setInt(1, membro.getMatricula().intValue());
            
            pst.executeUpdate();
            
        } catch (Exception e) {
            throw new DAOException("[VisitanteJDBC - delete] : Handled Exception  ", e);
            
        } finally {
            closeResources(conn, pst);
        }
    }

    @Override
    public List getAll() throws DAOException {
        String sql = "select * from cadastro_membro ";
        return this.getManyByCriteria(sql);
    }

    @Override
    public Membro getByPrimaryKey(Integer id) throws DAOException {
        String sql = "select * from cadastro_membro where id = " + id;
        List lista = this.getManyByCriteria(sql);
        if (lista != null && lista.size() > 0)
            return (Membro) lista.get(0);
        else
            return null;
    }

    @Override
    public List getByFilter(String filterName, String filterValue) throws DAOException {
        String sql = "select * from cadastro_membro where "+filterName+" = " + "'"+filterValue+"'";
        List lista = this.getManyByCriteria(sql);
        if (lista != null && lista.size() > 0)
            return lista;
        else{
            return null;
        }
    }

   
    
}
